Pythonã®tempfileã¢ãžã¥ãŒã«ã®å æ¬çãªã¬ã€ããäžæãã¡ã€ã«ãšãã£ã¬ã¯ããªã®äœæãå®å šãªåŠçãããã³ã¯ãã¹ãã©ãããã©ãŒã äºææ§ã®ããã®ãã¹ããã©ã¯ãã£ã¹ã«ã€ããŠèª¬æããŸãã
Tempfileã¢ãžã¥ãŒã«ïŒPythonã§ã®äžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªã®ç®¡ç
Pythonã®tempfile
ã¢ãžã¥ãŒã«ã¯ãäžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªãäœæããã³ç®¡çããããã®åŒ·åãªããŒã«ã§ããããã°ã©ã ã®å®è¡äžã«ããŒã¿ãäžæçã«ä¿åããå¿
èŠããããããã¡ã€ã«ã·ã¹ãã ã«æ°žç¶çã«ä¿åããå¿
èŠããªãå Žåã«éåžžã«åœ¹ç«ã¡ãŸããããã¯ãããŒã¿åŠçãã€ãã©ã€ã³ããã¹ããã¬ãŒã ã¯ãŒã¯ãããã³ã¢ããããŒããŸãã¯äžéçµæã®åŠçã«äžæã¹ãã¬ãŒãžãå¿
èŠãªWebã¢ããªã±ãŒã·ã§ã³ãªã©ã®ã·ããªãªã§ç¹ã«åœ¹ç«ã¡ãŸãã
Tempfileã¢ãžã¥ãŒã«ã䜿çšããçç±
- èªåã¯ãªãŒã³ã¢ããïŒ
tempfile
ã¢ãžã¥ãŒã«ã¯ãäžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªãäžèŠã«ãªã£ããšãã«èªåçã«åé€ãããããã«ããããšã§ããã£ã¹ã¯å®¹éã®æµªè²»ãæœåšçãªã»ãã¥ãªãã£è匱æ§ãé²ããŸãã - å®å šãªäœæïŒäžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªãå®å šã«äœæããããã®æ©èœãæäŸããç«¶åç¶æ ãäžæ£ã¢ã¯ã»ã¹ãæå°éã«æããŸãã
- ãã©ãããã©ãŒã ã®ç¬ç«æ§ïŒã¢ãžã¥ãŒã«ã¯ãäžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªã®åŠçã«ããããã©ãããã©ãŒã åºæã®éããæœè±¡åããã³ãŒãã®ç§»æ€æ§ãé«ããŸãã
- ç°¡çŽ åããã管çïŒäžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªã®äœæãã¢ã¯ã»ã¹ãããã³åé€ã®ããã»ã¹ãç°¡çŽ åããã³ãŒãã®è€éãã軜æžããä¿å®æ§ãåäžãããŸãã
ã³ã¢æ©èœ
äžæãã¡ã€ã«ã®äœæ
tempfile
ã¢ãžã¥ãŒã«ã¯ãäžæãã¡ã€ã«ãäœæããããã®ããã€ãã®æ©èœãæäŸããŸããæãäžè¬çãªã®ã¯tempfile.TemporaryFile()
ã§ãéãããããšèªåçã«åé€ãããäžæãã¡ã€ã«ãªããžã§ã¯ããäœæããŸãã
äŸïŒåºæ¬çãªäžæãã¡ã€ã«ã®äœæ
import tempfile
with tempfile.TemporaryFile(mode='w+t') as temp_file:
temp_file.write('Hello, temporary world!')
temp_file.seek(0)
content = temp_file.read()
print(content)
# 'with'ãããã¯ãçµäºãããšããã¡ã€ã«ã¯èªåçã«åé€ãããŸã
ãã®äŸã§ã¯ãæžã蟌ã¿/èªã¿åãã¢ãŒãïŒw+t
ïŒã§äžæãã¡ã€ã«ãäœæããŸãããã¡ã€ã«ã¯with
ãããã¯ãçµäºãããšèªåçã«åé€ãããäžæãã¡ã€ã«ãæ®ããªãããã«ããŸããseek(0)
ã¡ãœããã¯ããã¡ã€ã«ãã€ã³ã¿ãå
é ã«ãªã»ããããããã«äœ¿çšãããæžã蟌ãã ã³ã³ãã³ããèªã¿åãããšãã§ããŸãã
TemporaryFile
颿°ã¯ã次ã®ãããªããã€ãã®ãªãã·ã§ã³ã®åŒæ°ãåãå
¥ããŸãã
mode
ïŒãã¡ã€ã«ã¢ãŒããæå®ããŸãïŒäŸïŒèªã¿åã/æžã蟌ã¿ããã¹ãã¢ãŒãã®å Žåã¯'w+t'
ãèªã¿åã/æžã蟌ã¿ãã€ããªã¢ãŒãã®å Žåã¯'w+b'
ïŒãbuffering
ïŒãããã¡ãªã³ã°ããªã·ãŒãå¶åŸ¡ããŸããencoding
ïŒããã¹ããã¡ã€ã«ã®ãšã³ã³ãŒãã£ã³ã°ãæå®ããŸãïŒäŸïŒ'utf-8'
ïŒãnewline
ïŒæ¹è¡å€æãå¶åŸ¡ããŸããsuffix
ïŒäžæãã¡ã€ã«åã«ãµãã£ãã¯ã¹ã远å ããŸããprefix
ïŒäžæãã¡ã€ã«åã«ãã¬ãã£ãã¯ã¹ã远å ããŸããdir
ïŒäžæãã¡ã€ã«ãäœæããããã£ã¬ã¯ããªãæå®ããŸããNone
ã®å Žåãã·ã¹ãã ã®ããã©ã«ãã®äžæãã£ã¬ã¯ããªã䜿çšãããŸãã
äŸïŒãµãã£ãã¯ã¹ãšãã¬ãã£ãã¯ã¹ãæã€äžæãã¡ã€ã«ã®äœæ
import tempfile
with tempfile.TemporaryFile(suffix='.txt', prefix='temp_', dir='/tmp', mode='w+t') as temp_file:
temp_file.write('This is a temporary text file.')
print(temp_file.name) # ãã¡ã€ã«åãåºåããŸãïŒäŸïŒ/tmp/temp_XXXXXX.txtïŒ
# 'with'ãããã¯ãçµäºãããšããã¡ã€ã«ã¯èªåçã«åé€ãããŸã
ãã®äŸã§ã¯ããµãã£ãã¯ã¹.txt
ãšãã¬ãã£ãã¯ã¹temp_
ãæã€äžæãã¡ã€ã«ã/tmp
ãã£ã¬ã¯ããªïŒUnixç³»ã·ã¹ãã ïŒã«äœæããŸãã Windowsã§ã¯ãC:\Temp
ã®ãããªé©åãªäžæãã£ã¬ã¯ããªããã¯ãã¹ãã©ãããã©ãŒã ã®äºææ§ãã¹ããšãããã€ã¡ã³ãã«é©ããŠããŸããå®éã®ååã«ã¯ãäžææ§ãä¿èšŒããããã«ã©ã³ãã ã«çæãããæåïŒXXXXXX
ã§è¡šãããïŒãå«ãŸããããšã«æ³šæããŠãã ããã
ååä»ãäžæãã¡ã€ã«ã®äœæ
ä»ã®ããã»ã¹ããã¢ã¯ã»ã¹ã§ããæ¢ç¥ã®ååãæã€äžæãã¡ã€ã«ãå¿
èŠã«ãªãå ŽåããããŸããããã«ã¯ãtempfile.NamedTemporaryFile()
颿°ã䜿çšã§ããŸãã
äŸïŒååä»ãäžæãã¡ã€ã«ã®äœæ
import tempfile
with tempfile.NamedTemporaryFile(delete=False, suffix='.txt', prefix='named_') as temp_file:
temp_file.write('This is a named temporary file.')
file_name = temp_file.name
print(f'File created: {file_name}')
# delete=Falseã®ããããã¡ã€ã«ã¯èªåçã«åé€ãããŸãã
# å®äºãããæåã§åé€ããå¿
èŠããããŸã
import os
os.remove(file_name) # ãã¡ã€ã«ãæåã§åé€ããŸã
print(f'File deleted: {file_name}')
éèŠïŒããã©ã«ãã§ã¯ãNamedTemporaryFile()
ã¯éãããããšãã«ãã¡ã€ã«ã®åé€ã詊ã¿ãŸãããããé²ãããã«ïŒä»ã®ããã»ã¹ãã¢ã¯ã»ã¹ã§ããããã«ïŒãdelete=False
ãèšå®ããŸãããã ããå®äºãããos.remove()
ã䜿çšããŠãã¡ã€ã«ãæåã§åé€ãã責任ããããŸããããããªããšãäžæãã¡ã€ã«ãã·ã¹ãã ã«æ®ããŸãã
äžæãã£ã¬ã¯ããªã®äœæ
tempfile
ã¢ãžã¥ãŒã«ã䜿çšãããšãtempfile.TemporaryDirectory()
颿°ã䜿çšããŠäžæãã£ã¬ã¯ããªãäœæããããšãã§ããŸãã
äŸïŒäžæãã£ã¬ã¯ããªã®äœæ
import tempfile
with tempfile.TemporaryDirectory() as temp_dir:
print(f'Temporary directory created: {temp_dir}')
# temp_dirå
ã«ãã¡ã€ã«ãšãµããã£ã¬ã¯ããªãäœæã§ããŸã
import os
file_path = os.path.join(temp_dir, 'my_file.txt')
with open(file_path, 'w') as f:
f.write('This is a file in the temporary directory.')
# 'with'ãããã¯ãçµäºãããšããã£ã¬ã¯ããªãšãã®å
容ã¯èªåçã«åé€ãããŸã
TemporaryDirectory()
颿°ã¯ãwith
ãããã¯ãçµäºãããšããã¹ãŠã®äžèº«ãšãšãã«èªåçã«åé€ãããäžæãã£ã¬ã¯ããªãäœæããŸããããã«ããããã¡ã€ã«ãŸãã¯ãµããã£ã¬ã¯ããªããã£ãŠããäžæãã£ã¬ã¯ããªãæ®ããªãããã«ããŸãã
TemporaryFile
ãšåæ§ã«ãTemporaryDirectory
ãsuffix
ãprefix
ãããã³dir
åŒæ°ãåãå
¥ããŠããã£ã¬ã¯ããªåãšå Žæãã«ã¹ã¿ãã€ãºããŸãã
ããã©ã«ãã®äžæãã£ã¬ã¯ããªã®ååŸ
tempfile.gettempdir()
ã䜿çšããŠãã·ã¹ãã ã®ããã©ã«ãã®äžæãã£ã¬ã¯ããªã®å Žæãç¹å®ã§ããŸãã
äŸïŒããã©ã«ãã®äžæãã£ã¬ã¯ããªã®ååŸ
import tempfile
temp_dir = tempfile.gettempdir()
print(f'Default temporary directory: {temp_dir}')
ãã®é¢æ°ã¯ãdir
åŒæ°ãæç€ºçã«æå®ããªãå Žåã«ãäžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªãäœæãããå Žæã倿ããã®ã«åœ¹ç«ã¡ãŸãã
ã«ã¹ã¿ã ã®äžæãã£ã¬ã¯ããªã®å Žæã®éžæ
ããã©ã«ãã®äžæãã£ã¬ã¯ããªã¯ãäžæãã¡ã€ã«ã«æé©ãªå Žæãšã¯éããŸãããããšãã°ãããé«éãªã¹ãã¬ãŒãžããã€ã¹äžã®ãã£ã¬ã¯ããªãŸãã¯ç¹å®ã®æš©éãæã€ãã£ã¬ã¯ããªã䜿çšãããå ŽåããããŸããtempfile
ã¢ãžã¥ãŒã«ã§äœ¿çšãããå Žæã¯ã次ã®ãããªããã€ãã®æ¹æ³ã§åœ±é¿ãäžããããšãã§ããŸãã
dir
åŒæ°ïŒåè¿°ã®ããã«ãdir
åŒæ°ãTemporaryFile
ãNamedTemporaryFile
ãããã³TemporaryDirectory
ã«æž¡ããŠã䜿çšããæ£ç¢ºãªãã£ã¬ã¯ããªãæå®ã§ããŸããããã¯æãæç€ºçã§ä¿¡é Œæ§ã®é«ãæ¹æ³ã§ãã- ç°å¢å€æ°ïŒ
tempfile
ã¢ãžã¥ãŒã«ã¯ãäžæãã£ã¬ã¯ããªã®å Žæã倿ããããã«ãããã€ãã®ç°å¢å€æ°ãåç §ããŸããåªå é äœã¯éåžžãTMPDIR
ãTEMP
ãããã³TMP
ã§ãããããã®ããããèšå®ãããŠããªãå Žåã¯ããã©ãããã©ãŒã åºæã®ããã©ã«ãã䜿çšãããŸãïŒUnixç³»ã·ã¹ãã ã§ã¯/tmp
ãWindowsã§ã¯C:\Users\
ãªã©ïŒã\AppData\Local\Temp tempfile.tempdir
ã®èšå®ïŒtempfile.tempdir
屿§ããã£ã¬ã¯ããªãã¹ã«çŽæ¥èšå®ã§ããŸããããã¯ãtempfile
ã¢ãžã¥ãŒã«ã®é¢æ°ãžã®åŸç¶ã®ãã¹ãŠã®åŒã³åºãã«åœ±é¿ããŸãããã ããããã¯éåžžããã«ãã¹ã¬ãããŸãã¯ãã«ãããã»ã¹ã®ç°å¢ã§ã¯ãå§ãã§ããŸãããç«¶åç¶æ ãäºæž¬äžå¯èœãªåäœã«ã€ãªããå¯èœæ§ãããããã§ãã
äŸïŒTMPDIR
ç°å¢å€æ°ã®äœ¿çšïŒLinux / macOSïŒ
import os
import tempfile
os.environ['TMPDIR'] = '/mnt/fast_ssd/temp'
with tempfile.TemporaryFile() as temp_file:
print(temp_file.name) # ãããã/mnt/fast_ssd/tempã«ãããŸã
äŸïŒTEMP
ç°å¢å€æ°ã®èšå®ïŒWindowsïŒ
import os
import tempfile
os.environ['TEMP'] = 'D:\Temp'
with tempfile.TemporaryFile() as temp_file:
print(temp_file.name) # ããããD:\Tempã«ãããŸã
泚æïŒç°å¢å€æ°ãŸãã¯tempfile.tempdir
ã倿Žãããšãã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåãŸãã¯ä»ã®ã¢ããªã±ãŒã·ã§ã³ãããã©ã«ãã®äžæãã£ã¬ã¯ããªã«äŸåããŠããå Žåã«ãæå³ããªãçµæãçããå¯èœæ§ããããŸãããããã®ã¡ãœããã¯æ
éã«äœ¿çšãã倿Žãæç¢ºã«ææžåããŠãã ããã
ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé
äžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªã䜿çšããå Žåã¯ãã»ãã¥ãªãã£ãžã®åœ±é¿ãèæ
®ããããšãéèŠã§ããtempfile
ã¢ãžã¥ãŒã«ã¯ãæœåšçãªãªã¹ã¯ã軜æžããããã®ããã€ãã®æ©èœãæäŸããŸãã
- å®å šãªäœæïŒã¢ãžã¥ãŒã«ã¯ãäžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªãäœæããããã®å®å šãªã¡ãœããã䜿çšããã¢ã¿ãã«ãŒãããã°ã©ã ã®åã«äžæãã¡ã€ã«ãäœæãŸãã¯æäœã§ããç«¶åç¶æ ã®ãªã¹ã¯ãæå°éã«æããŸãã
- ã©ã³ãã åãããååïŒäžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªã«ã¯ã©ã³ãã ãªååãä»ããããã¢ã¿ãã«ãŒããã®å Žæãæšæž¬ããããšãé£ãããªããŸãã
- å¶éãããæš©éïŒUnixç³»ã·ã¹ãã ã§ã¯ãäžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªã¯éåžžãå¶éãããæš©éïŒãã¡ã€ã«ã®å Žåã¯
0600
ããã£ã¬ã¯ããªã®å Žåã¯0700
ãªã©ïŒã§äœæããããªãŒããŒãžã®ã¢ã¯ã»ã¹ãå¶éãããŸãã
ãã ããæ¬¡ã®ã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ã«ã泚æããå¿ èŠããããŸãã
- äºæž¬å¯èœãªååã®äœ¿çšãé¿ããïŒäžæãã¡ã€ã«ãŸãã¯ãã£ã¬ã¯ããªã«äºæž¬å¯èœãªååã䜿çšããªãã§ãã ããã
tempfile
ã¢ãžã¥ãŒã«ãæäŸããã©ã³ãã ãªååã®çæã«äŸåããŠãã ããã - æš©éã®å¶éïŒäžæãã¡ã€ã«ãŸãã¯ãã£ã¬ã¯ããªãžã®ã¢ã¯ã»ã¹ãä»ã®ãŠãŒã¶ãŒãŸãã¯ããã»ã¹ã«èš±å¯ããå¿ èŠãããå Žåã¯ãèšå®ããæš©éã«éåžžã«æ³šæããŠãã ãããå¿ èŠãªæå°éã®æš©éãä»äžãããã现ããå¶åŸ¡ã®ããã«ã¢ã¯ã»ã¹å¶åŸ¡ãªã¹ãïŒACLïŒã®äœ¿çšãæ€èšããŠãã ããã
- å ¥åã®ãµãã¿ã€ãºïŒäžæãã¡ã€ã«ã䜿çšããŠå€éšãœãŒã¹ïŒãŠãŒã¶ãŒã¢ããããŒããªã©ïŒããããŒã¿ãåŠçããå Žåã¯ãäžæãã¡ã€ã«ã«æªæã®ããã³ãŒããæžã蟌ãŸããªãããã«ãå ¥åããŒã¿ããµãã¿ã€ãºããŠãã ããã
- ãã¡ã€ã«ã®å®å
šãªåé€ïŒ
tempfile
ã¢ãžã¥ãŒã«ã¯äžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªãèªåçã«åé€ããŸããããã¡ã€ã«ãæåã§åé€ããå¿ èŠãããç¶æ³ãããå ŽåããããŸãïŒdelete=False
ã§NamedTemporaryFile
ã䜿çšããå Žåãªã©ïŒããã®ãããªå Žåã¯ãos.remove()
颿°ãŸãã¯ä»ã®å®å šãªåé€ã¡ãœããã䜿çšããŠãããŒã¿ã®æ®éªžããã£ã¹ã¯ã«æ®ããªãããã«ããããšãæ€èšããŠãã ãããå®å šãªãã¡ã€ã«åé€ã®ããã®ããã€ãã®ã©ã€ãã©ãªãååšãããã¡ã€ã«ã®ãªã³ã¯ãè§£é€ããåã«ãã¡ã€ã«ãè€æ°åäžæžãããŸãã
ãã¹ããã©ã¯ãã£ã¹
- ã³ã³ããã¹ããããŒãžã£ãŒã®äœ¿çšïŒ
with
ã¹ããŒãã¡ã³ãïŒïŒäžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªã䜿çšããå Žåã¯ãåžžã«with
ã¹ããŒãã¡ã³ãã䜿çšããŠãã ãããããã«ãããäŸå€ãçºçããå Žåã§ãããã¡ã€ã«ããã³ãã£ã¬ã¯ããªãå®äºæã«èªåçã«éããããåé€ãããããšãä¿èšŒãããŸãã - é©åãªé¢æ°ã®éžæïŒéãããããšèªåçã«åé€ãããå¿åã®äžæãã¡ã€ã«ã«ã¯ã
TemporaryFile
ã䜿çšããŸããä»ã®ããã»ã¹ããã¢ã¯ã»ã¹ã§ããæ¢ç¥ã®ååãæã€äžæãã¡ã€ã«ãå¿ èŠãªå Žåã¯ãNamedTemporaryFile
ã䜿çšããŸãããæåã§åé€ããããšãå¿ããªãã§ãã ãããèªåçã«ã¯ãªãŒã³ã¢ããããå¿ èŠãããäžæãã£ã¬ã¯ããªã«ã¯ãTemporaryDirectory
ã䜿çšããŸãã - ãã©ãããã©ãŒã ã®éãã®èæ
®ïŒäžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªã®åŠçã«ããããã©ãããã©ãŒã åºæã®éãã«æ³šæããŠãã ãããã³ãŒããæåŸ
ã©ããã«åäœããããšã確èªããããã«ãããŸããŸãªãã©ãããã©ãŒã ã§ã³ãŒãããã¹ãããŸãã
os.path.join
ã䜿çšããŠãäžæãã£ã¬ã¯ããªå ã®ãã¡ã€ã«ããã³ãã£ã¬ã¯ããªãžã®ãã¹ãæ§ç¯ããã¯ãã¹ãã©ãããã©ãŒã ã®äºææ§ã確ä¿ããŸãã - äŸå€ã®åŠçïŒäžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªã®äœæãŸãã¯ã¢ã¯ã»ã¹æã«çºçããå¯èœæ§ã®ããäŸå€ãåŠçããæºåãããŠãã ãããããã«ã¯ãæš©éã®åé¡ããã£ã¹ã¯å®¹éã®åé¡ããŸãã¯ãã®ä»ã®äºæããªããšã©ãŒã瀺ãå¯èœæ§ã®ãã
IOError
ãOSError
ãããã³ãã®ä»ã®äŸå€ãå«ãŸããŸãã - ã³ãŒãã®ããã¥ã¡ã³ãåïŒäžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªã®äœ¿ç𿹿³ã説æããããã«ãã³ãŒããæç¢ºã«ããã¥ã¡ã³ãåããŠãã ãããããã«ãããä»ã®äººïŒããã³å°æ¥ã®èªåïŒãã³ãŒããçè§£ããŠä¿å®ãããããªããŸãã
é«åºŠãªäœ¿çšæ³
äžæãã¡ã€ã«ã®ååä»ãã®ã«ã¹ã¿ãã€ãº
tempfile
ã¢ãžã¥ãŒã«ã¯ãäžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªã«å®å
šã§ã©ã³ãã ãªååãæäŸããŸãããç¹å®ã®ãŠãŒã¹ã±ãŒã¹ã«åãããŠååä»ãã¹ããŒã ãã«ã¹ã¿ãã€ãºããå¿
èŠãããå ŽåããããŸããããšãã°ãããã»ã¹IDãŸãã¯çŸåšã®ã¿ã€ã ã¹ã¿ã³ãã«é¢ããæ
å ±ããã¡ã€ã«åã«å«ããå ŽåããããŸãã
ããã¯ãtempfile
ã¢ãžã¥ãŒã«ã®é¢æ°ããos
ãuuid
ãããã³datetime
ãªã©ã®ä»ã®Pythonã©ã€ãã©ãªãšçµã¿åãããããšã§å®çŸã§ããŸãã
äŸïŒããã»ã¹IDãšã¿ã€ã ã¹ã¿ã³ããæã€äžæãã¡ã€ã«ã®äœæ
import tempfile
import os
import datetime
process_id = os.getpid()
timestamp = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
prefix = f'process_{process_id}_{timestamp}_'
with tempfile.TemporaryFile(prefix=prefix) as temp_file:
print(temp_file.name)
# ãã¡ã€ã«åã¯ã/tmp/process_12345_20231027_103000_XXXXXXã®ããã«ãªããŸã
泚æïŒäžæãã¡ã€ã«åãã«ã¹ã¿ãã€ãºããå Žåã¯ãäºæž¬å¯èœãŸãã¯æšæž¬ããããååã䜿çšããŠè匱æ§ãå°å ¥ããªãããã«æ³šæããŠãã ãããååãååã«ã©ã³ãã ã§å®å šã§ããããšã確èªããŠãã ããã
ãµãŒãããŒãã£ã©ã€ãã©ãªãšã®çµ±å
tempfile
ã¢ãžã¥ãŒã«ã¯ãäžæãã¡ã€ã«ãŸãã¯ãã£ã¬ã¯ããªã®åŠçãå¿
èŠãšããããŸããŸãªãµãŒãããŒãã£ã©ã€ãã©ãªããã³ãã¬ãŒã ã¯ãŒã¯ãšã·ãŒã ã¬ã¹ã«çµ±åã§ããŸãã ããšãã°ïŒ
- ç»ååŠçã©ã€ãã©ãªïŒäŸïŒPillowãOpenCVïŒïŒäžæãã¡ã€ã«ã䜿çšããŠãäžéç»ååŠççµæãä¿åããããã¡ã¢ãªã«åãŸããªã倧ããªç»åãåŠçãããã§ããŸãã
- ããŒã¿ãµã€ãšã³ã¹ã©ã€ãã©ãªïŒäŸïŒpandasãNumPyïŒïŒäžæãã¡ã€ã«ã䜿çšããŠã倧ããªããŒã¿ã»ãããä¿åããããäžæã¹ãã¬ãŒãžãå¿ èŠãªããŒã¿å€æãå®è¡ãããã§ããŸãã
- Webãã¬ãŒã ã¯ãŒã¯ïŒäŸïŒDjangoãFlaskïŒïŒäžæãã¡ã€ã«ã䜿çšããŠããã¡ã€ã«ã®ã¢ããããŒããåŠçããããã¬ããŒããçæããããã»ãã·ã§ã³ããŒã¿ãä¿åãããã§ããŸãã
- ãã¹ããã¬ãŒã ã¯ãŒã¯ïŒäŸïŒpytestãunittestïŒïŒäžæãã£ã¬ã¯ããªã䜿çšããŠãéé¢ããããã¹ãç°å¢ãäœæãããããã¹ãããŒã¿ãä¿åãããã§ããŸãã
äŸïŒPillowã§tempfile
ãç»ååŠçã«äœ¿çšãã
from PIL import Image
import tempfile
# ãµã³ãã«ç»åãäœæããŸã
image = Image.new('RGB', (500, 500), color='red')
with tempfile.NamedTemporaryFile(suffix='.png', delete=False) as temp_file:
image.save(temp_file.name, 'PNG')
print(f'Image saved to temporary file: {temp_file.name}')
# ç»åãã¡ã€ã«ã«å¯ŸããŠããã«æäœãå®è¡ããŸã
# ïŒäŸïŒPillowãŸãã¯OpenCVã䜿çšããŠããŒãããŸãïŒ
# å®äºãããããã¡ã€ã«ãåé€ããããšãå¿ããªãã§ãã ããïŒos.remove(temp_file.name)ïŒ
import os
os.remove(temp_file.name)
ã¯ãã¹ãã©ãããã©ãŒã ã«é¢ããèæ ®äºé
è€æ°ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒWindowsãmacOSãLinuxãªã©ïŒã§å®è¡ããå¿
èŠãããã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåã¯ãtempfile
ã¢ãžã¥ãŒã«ã䜿çšããéã«ãã¯ãã¹ãã©ãããã©ãŒã ã®äºææ§ãèæ
®ããããšãéèŠã§ãã
ããã€ãã®éèŠãªèæ ®äºé ãæ¬¡ã«ç€ºããŸãã
- ãã¹åºåãæåïŒãã¡ã€ã«ãã¹ãæ§ç¯ããã«ã¯
os.path.join()
ã䜿çšããŸããçŸåšã®ãã©ãããã©ãŒã ã®æ£ãããã¹åºåãæåïŒUnixç³»ã·ã¹ãã ã§ã¯/
ãWindowsã§ã¯\
ïŒãèªåçã«äœ¿çšãããããã§ãã - äžæãã£ã¬ã¯ããªã®å ŽæïŒããã©ã«ãã®äžæãã£ã¬ã¯ããªã®å Žæã¯ããã©ãããã©ãŒã ã«ãã£ãŠç°ãªãå¯èœæ§ãããããšã«æ³šæããŠãã ãããUnixç³»ã·ã¹ãã ã§ã¯ãéåžžã¯
/tmp
ã§ãããWindowsã§ã¯ãéåžžã¯C:\Users\
ã§ãã\AppData\Local\Temp tempfile.gettempdir()
ã䜿çšããŠããã©ã«ãã®å Žæãç¹å®ãããŠãŒã¶ãŒãç°å¢å€æ°ãŸãã¯æ§æãã¡ã€ã«ãä»ããŠäžæãã£ã¬ã¯ããªã®å Žæãæ§æã§ããããã«ããããšãæ€èšããŠãã ããã - ãã¡ã€ã«æš©éïŒãã¡ã€ã«æš©éã¢ãã«ã¯ãUnixç³»ã·ã¹ãã ãšWindowsã§å€§ããç°ãªããŸããUnixç³»ã·ã¹ãã ã§ã¯ã
os.chmod()
颿°ã䜿çšããŠãã¡ã€ã«æš©éãèšå®ã§ããŸãããWindowsã§ã¯ããã©ãããã©ãŒã åºæã®APIãŸãã¯ã©ã€ãã©ãªã䜿çšããŠã¢ã¯ã»ã¹å¶åŸ¡ãªã¹ãïŒACLïŒã管çããå¿ èŠããããŸãã - ãã¡ã€ã«ããã¯ïŒãã¡ã€ã«ããã¯ã¡ã«ããºã ããã©ãããã©ãŒã ã«ãã£ãŠç°ãªãå ŽåããããŸããã¢ããªã±ãŒã·ã§ã³ã§ãã¡ã€ã«ããã¯ãå®è£
ããå¿
èŠãããå Žåã¯ã
fcntl
ã¢ãžã¥ãŒã«ïŒUnixç³»ã·ã¹ãã ã®å ŽåïŒãŸãã¯msvcrt
ã¢ãžã¥ãŒã«ïŒWindowsã®å ŽåïŒããŸãã¯portalocker
ã®ãããªã¯ãã¹ãã©ãããã©ãŒã ã©ã€ãã©ãªã®äœ¿çšãæ€èšããŠãã ããã
Tempfileã®ä»£æ¿
tempfile
ã¯äžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªã管çããããã®æé©ãªéžæè¢ã§ããããšãå€ãã§ãããç¹å®ã®ç¶æ³ã§ã¯ãããé©åãªä»£æ¿ã¢ãããŒãããããããããŸããã
- ã€ã³ã¡ã¢ãªããŒã¿æ§é ïŒå°éã®ããŒã¿ã®ã¿ãäžæçã«ä¿åããå¿ èŠãããå Žåã¯ãäžæãã¡ã€ã«ãäœæãã代ããã«ããªã¹ããèŸæžããŸãã¯ã»ãããªã©ã®ã€ã³ã¡ã¢ãªããŒã¿æ§é ã®äœ¿çšãæ€èšããŠãã ãããããã¯ããå¹ççã§ããããã¡ã€ã«I/Oã®ãªãŒããŒããããåé¿ã§ããŸãã
- ããŒã¿ããŒã¹ïŒäŸïŒSQLiteã€ã³ã¡ã¢ãªã¢ãŒãïŒïŒããè€éãªããŒã¿ã¹ãã¬ãŒãžããã³ååŸèŠä»¶ã«ã€ããŠã¯ãSQLiteãªã©ã®ããŒã¿ããŒã¹ãã€ã³ã¡ã¢ãªã¢ãŒãã§äœ¿çšã§ããŸããããã«ãããããŒã¿ããã£ã¹ã¯ã«æ°žç¶åããã«ãSQLã¯ãšãªããã®ä»ã®ããŒã¿ããŒã¹æ©èœã䜿çšã§ããŸãã
- RedisãŸãã¯MemcachedïŒè¿ éãã€é »ç¹ã«ã¢ã¯ã»ã¹ããå¿ èŠãããããŒã¿ããã£ãã·ã¥ããå Žåã¯ãRedisãŸãã¯Memcachedã®ãããªã€ã³ã¡ã¢ãªããŒã¿ã¹ãã¢ã®äœ¿çšãæ€èšããŠãã ããããããã®ã·ã¹ãã ã¯ã髿§èœãã£ãã·ã¥çšã«èšèšãããŠããããã£ãã·ã¥ç®çã§äžæãã¡ã€ã«ã䜿çšãããããå¹ççã§ãã
çµè«
tempfile
ã¢ãžã¥ãŒã«ã¯ãPythonã®æšæºã©ã€ãã©ãªã®éèŠãªéšåã§ãããäžæãã¡ã€ã«ããã³ãã£ã¬ã¯ããªã管çããããã®å
ç¢ã§å®å
šãªæ¹æ³ãæäŸããŸãããã®ã³ã¢æ©èœãã»ãã¥ãªãã£ã«é¢ããèæ
®äºé
ãããã³ãã¹ããã©ã¯ãã£ã¹ãçè§£ããããšã§ããããžã§ã¯ãã§å¹æçã«äœ¿çšããŠãäžæããŒã¿ãåŠçãããã¡ã€ã«ç®¡çãç°¡çŽ åããã¢ããªã±ãŒã·ã§ã³å
šäœã®ä¿¡é Œæ§ãåäžãããããšãã§ããŸããåžžã«ã³ã³ããã¹ããããŒãžã£ãŒïŒwith
ã¹ããŒãã¡ã³ãïŒã䜿çšããŠèªåã¯ãªãŒã³ã¢ãããè¡ããããŒãºã«åã£ãé©åãªé¢æ°ïŒTemporaryFile
ãNamedTemporaryFile
ããŸãã¯TemporaryDirectory
ïŒãéžæãããã©ãããã©ãŒã åºæã®éãã«æ³šæããŠãã¯ãã¹ãã©ãããã©ãŒã ã®äºææ§ã確ä¿ããããšãå¿ããªãã§ãã ããã